package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.web.struts.forms.reporteFour;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class descargaReporteCuatro extends Action {
    
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException{
        
        
        reporteFour f = ( reporteFour ) form ;                
        
        OutputStream out = null;
        
        try{
            
            response.setContentType( "application/vnd.ms-excel" ) ;
            response.setHeader( "Content-disposition", "attachment; filename=\"Reporte_4.xls\"" ) ;
            response.setHeader( "Content-type", "application/vnd.ms-excel" ) ;
            
            //ini:formato
            WritableFont cabeceraFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true);
            WritableFont cuerpoFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
            WritableFont domicilioFont = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false); 

            WritableCellFormat fCabecera = new WritableCellFormat(cabeceraFont);
            fCabecera.setAlignment(Alignment.JUSTIFY);
            fCabecera.setVerticalAlignment(VerticalAlignment.CENTRE);
            fCabecera.setBackground(Colour.CORAL);
            fCabecera.setBorder(Border.ALL,BorderLineStyle.THIN);

            WritableCellFormat fCuerpo = new WritableCellFormat(cuerpoFont);
            fCuerpo.setAlignment(Alignment.LEFT);
            fCuerpo.setBorder(Border.ALL,BorderLineStyle.THIN);

            WritableCellFormat fCuerpo2 = new WritableCellFormat(domicilioFont);
            fCuerpo2.setAlignment(Alignment.LEFT);
            fCuerpo2.setBorder(Border.ALL,BorderLineStyle.THIN);
            
            //fin:formato
    
            WritableWorkbook w = Workbook.createWorkbook(response.getOutputStream());
            WritableSheet s = w.createSheet("Informe", 0); //Nombre de hoja
            
            s.setColumnView(0,10);//ini:seteamos el ancho de las columnas 
            s.setColumnView(1,20);
            s.setColumnView(2,20);
            s.setColumnView(3,20);
            s.setColumnView(4,25);
            s.setColumnView(5,10);
            s.setColumnView(6,15);
            s.setColumnView(7,15);
            s.setColumnView(8,10);
            s.setColumnView(9,10);
            s.setColumnView(10,30);
            s.setColumnView(11,20);
            s.setColumnView(12,20);
            
            //ini: armando el excel
                s.addCell(new Label(0, 0, "País",fCabecera)); //añadiendo celdas
                s.addCell(new Label(1, 0, "BC",fCabecera));
                s.addCell(new Label(2, 0, "CUENTA",fCabecera));
                s.addCell(new Label(3, 0, "Campaña",fCabecera));
                s.addCell(new Label(4, 0, "Asset",fCabecera)); //añadiendo celdas
                s.addCell(new Label(5, 0, "Inicio",fCabecera));
                s.addCell(new Label(6, 0, "Fin",fCabecera));
                s.addCell(new Label(7, 0, "Paquetes",fCabecera));
                s.addCell(new Label(8, 0, "Costo total de paquetes",fCabecera));
                if( f.getTipo( ) == 1 ){
                    s.addCell(new Label(9, 0, "Enero",fCabecera));
                    s.addCell(new Label(10, 0, "Febrero",fCabecera));
                    s.addCell(new Label(11, 0, "Marzo",fCabecera));
                    s.addCell(new Label(12, 0, "Abril",fCabecera));
                    s.addCell(new Label(13, 0, "Mayo",fCabecera));
                    s.addCell(new Label(14, 0, "Junio",fCabecera));
                    s.addCell(new Label(15, 0, "Julio",fCabecera));
                    s.addCell(new Label(16, 0, "Agosto",fCabecera));
                    s.addCell(new Label(17, 0, "Septiembre",fCabecera));
                    s.addCell(new Label(18, 0, "Octubre",fCabecera));
                    s.addCell(new Label(19, 0, "Noviembre",fCabecera));
                    s.addCell(new Label(20, 0, "Diciembre",fCabecera));
                }else
                    if( f.getTipo( ) == 2 ){
                        s.addCell(new Label(9, 0, "Q1",fCabecera));
                        s.addCell(new Label(10, 0, "Q2",fCabecera));
                        s.addCell(new Label(11, 0, "Q3",fCabecera));
                        s.addCell(new Label(12, 0, "Q4",fCabecera));
                    }else
                        if( f.getTipo( ) == 3 ){
                            switch( f.getSubTipo( ) ){
                                case 15 :
                                    s.addCell(new Label(9, 0, "Q4",fCabecera));
                                    break;
                                case 14 :
                                    s.addCell(new Label(9, 0, "Q3",fCabecera));
                                    break;
                                case 13 :
                                    s.addCell(new Label(9, 0, "Q2",fCabecera));
                                    break;
                                case 12 :
                                    s.addCell(new Label(9, 0, "Q1",fCabecera));
                                    break;
                            }
                                
                        }else
                            if( f.getTipo( ) == 4 ){
                                switch( f.getSubTipo( ) ){
                                    case 0 :
                                        s.addCell(new Label(9, 0, "Enero",fCabecera));
                                        break;
                                    case 1 :
                                        s.addCell(new Label(9, 0, "Febrero",fCabecera));
                                        break;
                                    case 2 :
                                        s.addCell(new Label(9, 0, "Marzo",fCabecera));
                                        break;
                                    case 3 :
                                        s.addCell(new Label(9, 0, "Abril",fCabecera));
                                        break;
                                    case 4 :
                                        s.addCell(new Label(9, 0, "Mayo",fCabecera));
                                        break;
                                    case 5 :
                                        s.addCell(new Label(9, 0, "Junio",fCabecera));
                                        break;
                                    case 6 :
                                        s.addCell(new Label(9, 0, "Julio",fCabecera));
                                        break;
                                    case 7 :
                                        s.addCell(new Label(9, 0, "Agosto",fCabecera));
                                        break;
                                    case 8 :
                                        s.addCell(new Label(9, 0, "Septiembre",fCabecera));
                                        break;
                                    case 9 :
                                        s.addCell(new Label(9, 0, "Octubre",fCabecera));
                                        break;
                                    case 10 :
                                        s.addCell(new Label(9, 0, "Noviembre",fCabecera));
                                        break;
                                    case 11 :
                                        s.addCell(new Label(9, 0, "Diciembre",fCabecera));
                                        break;                                        
                                }
                            }
                
                int j = 0 ;
                for( int i = 0 ; i < f.getPaisR4( ).length ; i ++ ){

                    s.addCell( new Label( 0, i + 1, MCUtil.TextoFormateado( f.getPaisR4( )[ i ]),fCuerpo ) ) ;
                    s.addCell( new Label( 1, i + 1, ""+f.getBcR4( )[ i ] ,fCuerpo ) ) ;
                    s.addCell( new Label( 2, i + 1, MCUtil.TextoFormateado( f.getCuentaR4( )[ i ] ),fCuerpo ) );
                    s.addCell( new Label( 3, i + 1, MCUtil.TextoFormateado( f.getCampaniaR4( )[ i ]),fCuerpo ) ) ;
                    s.addCell( new Label( 4, i + 1, MCUtil.TextoFormateado( f.getAssetR4( )[ i ] ),fCuerpo ) ) ;
                    s.addCell( new Label( 5, i + 1, ""+f.getFechaInicio( )[ i ],fCuerpo ) ) ;
                    s.addCell( new Label( 6, i + 1, ""+f.getFechaFin( )[ i ],fCuerpo ) );
                    s.addCell( new Label( 7, i + 1, ""+f.getPaquetesR4( )[ i ] ,fCuerpo ) ) ;
                    s.addCell( new Label( 8, i + 1, ""+f.getCosto( )[ i ],fCuerpo ) );
                    
                    if( f.getTipo( ) == 1 ){
                    s.addCell(new Label(9, i + 1, ""+f.getEnero( )[ i ],fCuerpo));
                    s.addCell(new Label(10, i + 1, ""+f.getFebrero( )[ i ],fCuerpo));
                    s.addCell(new Label(11, i + 1, ""+f.getMarzo( )[ i ],fCuerpo));
                    s.addCell(new Label(12, i + 1, ""+f.getAbril( )[ i ],fCuerpo));
                    s.addCell(new Label(13, i + 1, ""+f.getMayo( )[ i ],fCuerpo));
                    s.addCell(new Label(14, i + 1, ""+f.getJunio( )[ i ],fCuerpo));
                    s.addCell(new Label(15, i + 1, ""+f.getJulio( )[ i ],fCuerpo));
                    s.addCell(new Label(16, i + 1, ""+f.getAgosto( )[ i ],fCuerpo));
                    s.addCell(new Label(17, i + 1, ""+f.getSeptiembre( )[ i ],fCuerpo));
                    s.addCell(new Label(18, i + 1, ""+f.getOctubre( )[ i ],fCuerpo));
                    s.addCell(new Label(19, i + 1, ""+f.getNoviembre( )[ i ],fCuerpo));
                    s.addCell(new Label(20, i + 1, ""+f.getDiciembre( )[ i ],fCuerpo));
                }else
                    if( f.getTipo( ) == 2 ){
                        s.addCell(new Label(9, i + 1, ""+f.getQ1( )[ i ],fCuerpo));
                        s.addCell(new Label(10, i + 1, ""+f.getQ2( )[ i ],fCuerpo));
                        s.addCell(new Label(11, i + 1, ""+f.getQ3( )[ i ],fCuerpo));
                        s.addCell(new Label(12, i + 1, ""+f.getQ4( )[ i ],fCuerpo));
                    }else
                        if( f.getTipo( ) == 3 ){
                            switch( f.getSubTipo( ) ){
                                case 15 :
                                    s.addCell(new Label(9, i + 1, ""+f.getQ4( )[ i ],fCuerpo));
                                    break;
                                case 14 :
                                    s.addCell(new Label(9, i + 1, ""+f.getQ3( )[ i ],fCuerpo));
                                    break;
                                case 13 :
                                    s.addCell(new Label(9, i + 1, ""+f.getQ2( )[ i ],fCuerpo));
                                    break;
                                case 12 :
                                    s.addCell(new Label(9, i + 1, ""+f.getQ1( )[ i ],fCuerpo));
                                    break;
                            }
                                
                        }else
                            if( f.getTipo( ) == 4 ){
                                switch( f.getSubTipo( ) ){
                                    case 0 :
                                        s.addCell(new Label(9, i + 1, ""+f.getEnero( )[ i ],fCuerpo));
                                        break;
                                    case 1 :
                                        s.addCell(new Label(9, i + 1, ""+f.getFebrero( )[ i ],fCuerpo));
                                        break;
                                    case 2 :
                                        s.addCell(new Label(9, i + 1, ""+f.getMarzo( )[ i ],fCuerpo));
                                        break;
                                    case 3 :
                                        s.addCell(new Label(9, i + 1, ""+f.getAbril( )[ i ],fCuerpo));
                                        break;
                                    case 4 :
                                        s.addCell(new Label(9, i + 1, ""+f.getMayo( )[ i ],fCuerpo));
                                        break;
                                    case 5 :
                                        s.addCell(new Label(9, i + 1, ""+f.getJunio( )[ i ],fCuerpo));
                                        break;
                                    case 6 :
                                        s.addCell(new Label(9, i + 1, ""+f.getJulio( )[ i ],fCuerpo));
                                        break;
                                    case 7 :
                                        s.addCell(new Label(9, i + 1, ""+f.getAgosto( )[ i ],fCuerpo));
                                        break;
                                    case 8 :
                                        s.addCell(new Label(9, i + 1, ""+f.getSeptiembre( )[ i ],fCuerpo));
                                        break;
                                    case 9 :
                                        s.addCell(new Label(9, i + 1, ""+f.getOctubre( )[ i ],fCuerpo));
                                        break;
                                    case 10 :
                                        s.addCell(new Label(9, i + 1, ""+f.getNoviembre( )[ i ],fCuerpo));
                                        break;
                                    case 11 :
                                        s.addCell(new Label(9, i + 1, ""+f.getDiciembre( )[ i ],fCuerpo));
                                        break;                                        
                                }
                            }
                    
                    j = i + 1 ;
                }
                
                s.addCell(new Label(0, j + 1, "",fCuerpo)); //añadiendo celdas
                s.addCell(new Label(1, j + 1, "",fCuerpo));
                s.addCell(new Label(2, j + 1, "",fCuerpo));
                s.addCell(new Label(3, j + 1, "",fCuerpo));
                s.addCell(new Label(4, j + 1, "",fCuerpo)); //añadiendo celdas
                s.addCell(new Label(5, j + 1, "",fCuerpo));
                s.addCell(new Label(6, j + 1, "",fCuerpo));
                s.addCell(new Label(7, j + 1, "",fCuerpo));
                s.addCell(new Label(8, j + 1, "Totales",fCabecera));
                
                if( f.getTipo( ) == 1 ){
                    s.addCell(new Label(9, j + 1, ""+f.getEneroT( ),fCuerpo));
                    s.addCell(new Label(10, j + 1, ""+f.getFebreroT( ),fCuerpo));
                    s.addCell(new Label(11, j + 1, ""+f.getMarzoT( ),fCuerpo));
                    s.addCell(new Label(12, j + 1, ""+f.getAbrilT( ),fCuerpo));
                    s.addCell(new Label(13, j + 1, ""+f.getMayoT( ),fCuerpo));
                    s.addCell(new Label(14, j + 1, ""+f.getJunioT( ),fCuerpo));
                    s.addCell(new Label(15, j + 1, ""+f.getJulioT( ),fCuerpo));
                    s.addCell(new Label(16, j + 1, ""+f.getAgostoT( ),fCuerpo));
                    s.addCell(new Label(17, j + 1, ""+f.getSeptiembreT( ),fCuerpo));
                    s.addCell(new Label(18, j + 1, ""+f.getOctubreT( ),fCuerpo));
                    s.addCell(new Label(19, j + 1, ""+f.getNoviembreT( ),fCuerpo));
                    s.addCell(new Label(20, j + 1, ""+f.getDiciembreT( ),fCuerpo));
                }else
                    if( f.getTipo( ) == 2 ){
                        s.addCell(new Label(9, j + 1, ""+f.getQ1T( ),fCuerpo));
                        s.addCell(new Label(10, j + 1, ""+f.getQ2T( ),fCuerpo));
                        s.addCell(new Label(11, j + 1, ""+f.getQ3T( ),fCuerpo));
                        s.addCell(new Label(12, j + 1, ""+f.getQ4T( ),fCuerpo));
                    }else
                        if( f.getTipo( ) == 3 ){
                            switch( f.getSubTipo( ) ){
                                case 15 :
                                    s.addCell(new Label(9, j + 1, ""+f.getQ4T( ),fCuerpo));
                                    break;
                                case 14 :
                                    s.addCell(new Label(9, j + 1, ""+f.getQ3T( ),fCuerpo));
                                    break;
                                case 13 :
                                    s.addCell(new Label(9, j + 1, ""+f.getQ2T( ),fCuerpo));
                                    break;
                                case 12 :
                                    s.addCell(new Label(9, j + 1, ""+f.getQ1T( ),fCuerpo));
                                    break;
                            }
                                
                        }else
                            if( f.getTipo( ) == 4 ){
                                switch( f.getSubTipo( ) ){
                                    case 0 :
                                        s.addCell(new Label(9, j + 1, ""+f.getEneroT( ),fCuerpo));
                                        break;
                                    case 1 :
                                        s.addCell(new Label(9, j + 1, ""+f.getFebreroT( ),fCuerpo));
                                        break;
                                    case 2 :
                                        s.addCell(new Label(9, j + 1, ""+f.getMarzoT( ),fCuerpo));
                                        break;
                                    case 3 :
                                        s.addCell(new Label(9, j + 1, ""+f.getAbrilT( ),fCuerpo));
                                        break;
                                    case 4 :
                                        s.addCell(new Label(9, j + 1, ""+f.getMayoT( ),fCuerpo));
                                        break;
                                    case 5 :
                                        s.addCell(new Label(9, j + 1, ""+f.getJunioT( ),fCuerpo));
                                        break;
                                    case 6 :
                                        s.addCell(new Label(9, j + 1, ""+f.getJulioT( ),fCuerpo));
                                        break;
                                    case 7 :
                                        s.addCell(new Label(9, j + 1, ""+f.getAgostoT( ),fCuerpo));
                                        break;
                                    case 8 :
                                        s.addCell(new Label(9, j + 1, ""+f.getSeptiembreT( ),fCuerpo));
                                        break;
                                    case 9 :
                                        s.addCell(new Label(9, j + 1, ""+f.getOctubreT( ),fCuerpo));
                                        break;
                                    case 10 :
                                        s.addCell(new Label(9, j + 1, ""+f.getNoviembreT( ),fCuerpo));
                                        break;
                                    case 11 :
                                        s.addCell(new Label(9, j + 1, ""+f.getDiciembreT( ),fCuerpo));
                                        break;                                        
                                }
                            }
                        
         
            
            w.write();
            w.close();

            
        } catch ( Exception e ) {
            e.printStackTrace( ) ;
            out.close( ) ;
        }
        
        return null ;
        
    }
    
}
